package exception;
/**
 * java异常处理机制中的try...catch
 * 语法:
 * try{
 *   正常的代码片段(A计划)
 * }catch(XXXException){
 *   当try中的代码出现了XXXException之后的处理代码(B计划)
 * }
 */
public class TryCatchDemo {
    public static void main(String[] args) {
        System.out.println("程序开始了");
        try {
            //String str = null;
            //System.out.println(str.length());
            //String str = "abc";
            //System.out.println(str.charAt(5));
            String str = "abc";
            System.out.println(Integer.parseInt(str));
            /*
             try中的代码不出现异常时, catch语句块是不执行的
             try中的代码出现异常时, 剩余代码不会被执行
             */
            System.out.println("!!!!!");
        }
        //catch可以定义多个, 针对不同异常有不同的处理方式以分别捕获处理
        /*catch(NullPointerException e) {
            System.out.println("出现了空指针, 并处理完毕了")'
            }catch(StringIndexOutOfBoundsException e){
            System.out.println("出现了字符串下标越界异常，并处理完毕了");
        }*/
        catch (NullPointerException | StringIndexOutOfBoundsException e) {
            System.out.println("出现了空指针或者下标越界异常，并且用相同的方式处理完毕了");
        }catch(Exception e){ //捕获超类型异常，那么它的所有子类异常都可以被处理
            //如果catch的异常存在继承关系，那么子异常在上，父异常在下
            System.out.println("反正出了个错!");
        }
        System.out.println("程序结束了");
    }
}
